查看原文
其他

Substrate 的 RPC 客户端之 Subxt 入门篇

John Wu PolkaWorld 2023-08-21

Substrate生态系统中的RPC客户端

对于区块链开发团队,除了链本身的开发之外,最重要的就是如何与链进行交互了。一般来说UI的交互界面主要给一般用户使用的,而开发团队较多使用的是RPC客户端。

其实一个简单易用的RPC客户端会节省团队很多时间。以太坊并没有独立的RPC客户端(其实太坊独立的RPC客户端组件基本都在Javascript系统中),需要的时候只能从Geth或Parity-Ethereum中自己选取相应的组件自行拼装。这是我在从事以太坊开发的时候略有不满的地方。

而Substrate一下子就有两个独立的Rust原生RPC客户端!Parity的substrate-subxt和获得了W3F Grants的substrate-api-client。

目录结构

今天我们先来简单看一下substrate-subxt。(目前看来substrate-api-client的一个可能相对优势是它支持no_std)。先看下目录结构

src/
├── error.rs
├── events.rs
├── extrinsic.rs
├── frame
│ ├── balances.rs
│ ├── contracts.rs
│ ├── mod.rs
│ └── system.rs
├── lib.rs
├── metadata.rs
├── rpc.rs
└── runtimes.rs

大部分文件通过文件名就能看出其作用。lib.rs提供了我们所需要的客户端以及生产该客户端的工厂。frame文件夹提供了对Substrate frame同名模块的支持,而runtimes.rs适配了一个默认的Substrate runtime:DefaultNodeRuntime(该runtime包含frame目录下的那几个模块)。该runtime对于处理一般的转账和查询已经是够用了。

入门实战

这里我们用Subxt向Substrate链提交一笔转账,并查询账户的余额。先上代码:

use subxt::{
balances::{
self,
BalancesStore,
},
DefaultNodeRuntime as Runtime,
ClientBuilder,
};
use sp_keyring::AccountKeyring;

fn main() {

// 整个client需要由tokio驱动。首先创建一个适配
// DefaultNodeRuntime的客户端
let mut rt = tokio::runtime::Runtime::new().unwrap();
let client_future = ClientBuilder::<Runtime>::new().build();
let client = rt.block_on(client_future).unwrap();

// 为Alice创建一个transaction builder
let signer = AccountKeyring::Alice.pair();
let xt = rt.block_on(client.xt(signer, None)).unwrap();

let bob = AccountKeyring::Bob.to_account_id();
// 从Alice向Bob发起转账
let transfer =
xt.submit(balances::transfer::<Runtime>(bob.clone().into(), 10_000_000));
rt.block_on(transfer).unwrap();

// 查询Bob的余额
// 需要注意的是,由于上一步只能确保转账已经被提交
// 这里的余额一般还没来得及发生改变
println!("{:?}", rt.block_on(client.free_balance(bob.into())).unwrap());
}

涉及到的依赖

[dependencies]
tokio = "0.1"
sp-keyring = { git = "https://github.com/paritytech/substrate/", package = "sp-keyring" }
subxt = { git = "https://github.com/paritytech/substrate-subxt", package = "substrate-subxt" }

然后先跑一个Substrate的dev结点(目前的master就可以),就可以欢快地运行我们的程序和链进行交互啦。怎么样,Substrate生态中的RPC客户端是不是非常好用呢~

PS: 截止目前Subxt还有个小Bug导致编译可能无法通过,大家可以自己努力尝试解决下~


作者:John Wu(Cdot CTO,资深区块链开发者)


本周六的 Substrate 开发者聚会仅剩 16 个名额

本文作者 John Wu 也会到场分享哦~

点击下方卡片免费报名!

阅读更多:


开发了两年 Dapp、二层网络后,我转投了 Substrate 阵营

Substrate 区块链框架简介 | Hello, Substrate!

视频|Substrate 区块链开发范式简介


扫码关注公众号,回复 “1” 加入波卡群

点个 “在看” 再走吧!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存